package com.diy.sigmund.diyorder.common.middleware.mq.rocketmq.spring.one;

import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * <br>普通消费
 * <br>实现RocketMQListener接口
 * <br>申明泛型对象即业务对象
 * <br>使用@RocketMQMessageListener注解
 * <br>配置@RocketMQMessageListener注
 * <br>必须配置项入下
 * <br>group
 * <br>topic
 * <br>使用@Component注解或者子注解
 * <br>实现接口方法
 *
 * @author ylm-sigmund
 * @since 2022/5/5 22:21
 */
@Component
@RocketMQMessageListener(
        topic = "${topic.sendDataType}",
        // 通过集群消费的机制，我们可以实现针对相同 Topic ，不同消费者分组实现各自的业务逻辑。
        // 例如说：用户注册成功时，发送一条 Topic 为 "USER_REGISTER" 的消息。然后，不同模块使用不同的消费者分组，订阅该 Topic ，实现各自的拓展逻辑：
        //
        // 积分模块：判断如果是手机注册，给用户增加 20 积分。
        // 优惠劵模块：因为是新用户，所以发放新用户专享优惠劵。
        // 站内信模块：因为是新用户，所以发送新用户的欢迎语的站内信。
        //
        // 作者：梅西爱骑车
        // 链接：https://www.jianshu.com/p/c8db21311b8d
        // 来源：简书
        // 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
        consumerGroup = "${group.consumer.sendDataType}" + "copy")
public class SendDataTypeCopyConsumer implements RocketMQListener<MessageExt> {

    private static final Logger log = LoggerFactory.getLogger(SendDataTypeCopyConsumer.class);

    @Override
    public void onMessage(MessageExt message) {
        log.info(String.format("SendDataTypeCopyConsumer name is %s data is %s",
                this.getClass().getSimpleName(), message));
    }

}
